package mid

import (
	"github.com/gin-gonic/gin"
	"strings"
)

// 中间件：根据 IP 或来源站点进行访问控制
func AccessControlMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		//// 检查客户端 IP 地址
		//clientIP := c.ClientIP()
		//allowedIPs := []string{"127.0.0.1", "192.168.1.1"} // 示例允许的 IP 列表
		//
		//// 检查 IP 是否被允许
		//if !isIPAllowed(clientIP, allowedIPs) {
		//	log.Printf("拒绝访问的 IP: %s", clientIP)
		//	c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
		//		"code": 403,
		//		"msg":  "该 IP 无权限访问",
		//	})
		//	return
		//}
		//
		//// 检查来源站点的请求头
		//referrer := c.Request.Referer()
		//origin := c.Request.Header.Get("Origin")
		//allowedReferrers := []string{""} // 示例允许的来源站点
		//util.LogrusObj.Println("acm:来源域名:", origin)
		//// 如果来源站点不为空且不在允许列表中，则拒绝访问
		//if !isReferrerAllowed(referrer, allowedReferrers) {
		//	util.LogrusObj.Printf("acm:拒绝访问的来源站点: %s", referrer)
		//	c.AbortWithStatusJSON(http.StatusForbidden, gin.H{
		//		"code": 403,
		//		"msg":  "该来源站点无权限访问",
		//	})
		//	return
		//}

		// 如果以上检查都通过，继续处理请求
		c.Next()
	}
}

// 辅助函数：检查 IP 是否被允许
func isIPAllowed(clientIP string, allowedIPs []string) bool {
	for _, ip := range allowedIPs {
		if clientIP == ip {
			return true
		}
	}
	return false
}

// 辅助函数：检查来源站点是否被允许
func isReferrerAllowed(referrer string, allowedReferrers []string) bool {
	for _, allowed := range allowedReferrers {
		if strings.HasPrefix(referrer, allowed) {
			return true
		}
	}
	return false
}
